import { checkIDCard } from './regex-util'

// 校验证件号码
export function validatorSFZ(rule: any, value: any, callback: any) {
  if (value) {
    if (checkIDCard(value)) {
      callback()
    } else {
      callback(new Error('请填写正确的身份证'))
    }
  } else {
    callback()
  }
}

// 校验 姓名, 允许 中文 和 字母 和 空格
export function validatorName(rule: any, value: any, callback: any) {
  const reg = /^[\u4e00-\u9fa5a-zA-Z" "]+$/ // Unicode编码中的汉字范围
  if (value) {
    if (!reg.test(value)) {
      callback(new Error('姓名输入不合法'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 校验 非特殊字符, 只允许中文、数字、字母
export function validatorSpechars(rule: any, value: any, callback: any) {
  const reg = /^[\u4e00-\u9fa5a-zA-Z0-9]+$/ // Unicode编码中的非特殊字符范围
  if (value) {
    if (!reg.test(value)) {
      callback(new Error('只允许中文、数字、字母'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 校验联系电话 可为 手机号码, 固话(前缀3数字或4数字, 可有-分割)
export function validatorPhone(rule: any, value: any, callback: any) {
  const reg = [/^1[3|4|5|6|7|8|9]\d{9}$/, /^0\d{2,3}-?\d{7,8}$/, /^(0\d{2,3}-)?([2-9]\d{6,7})+(-\d{1,6})?$/]
  if (value) {
    const isTure = reg.every(item => {
      return item.test(value) === false
    })
    if (isTure) {
      callback(new Error('请填写正确的联系电话'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}
// 校验车牌
export function validatorPlate(rule: any, value: any, callback: any) {
  if (value) {
    const isTure = isVehicleNumber(value)
    if (!isTure) {
      callback(new Error('请填写正确的车牌号'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 车牌校验
function isVehicleNumber(vehicleNumber: string) {
    var xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/

    var creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/

    if (vehicleNumber.length == 7) {
      return creg.test(vehicleNumber)
    } else if (vehicleNumber.length == 8) {
      return xreg.test(vehicleNumber)
    } else {
      return false
    }
  }


// 函数节流
export function throttle(func: any, delay: number) {
  let run = true
  return () => {
    if (!run) {
      return // 如果开关关闭了，那就直接不执行下边的代码
    }
    run = false // 持续触发的话，run一直是false，就会停在上边的判断那里
    setTimeout(() => {
      func()
      run = true // 定时器到时间之后，会把开关打开，我们的函数就会被执行
    }, delay)
  }
}

// 判断两个对象的属性是否相等(浅相等, 如果属性为对象, 该函数不适合)
export function deepEqual(x: AnyObject | null, y: AnyObject | null) {
  // 指向同一内存时
  if (x === y) {
    return true
  } else if (typeof x == 'object' && x != null && typeof y == 'object' && y != null) {
    if (Object.keys(x).length != Object.keys(y).length) return false

    for (var prop in x) {
      if (y.hasOwnProperty(prop)) {
        if (!deepEqual(x[prop], y[prop])) return false
      } else return false
    }

    return true
  } else return false
}


// 校验 护照
export function validatorPassport(rule: any, value: any, callback: any) {
  const reg = /^([a-zA-z]|[0-9]){5,17}$/
  if (value) {
    if (!reg.test(value)) {
      callback(new Error('护照号码输入不合规'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 校验 军官证
export function validatorArmyman(rule: any, value: any, callback: any) {
  const reg = /^[\u4E00-\u9FA5](字第)([0-9a-zA-Z]{4,8})(号?)$/
  if (value) {
    if (!reg.test(value)) {
      callback(new Error('军官证号码输入不合规'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 校验 港澳台居民来往内地通行证
export function validatorGATpass(rule: any, value: any, callback: any) {
  const reg = /^\d{8}|^[a-zA-Z0-9]{10}|^\d{18}$|^([HM]\d{6,10}(\(\w{1}\))?)$/
  if (value) {
    if (!reg.test(value)) {
      callback(new Error('港澳台居民来往内地通行证号码输入不合规'))
    } else {
      callback()
    }
  } else {
    callback()
  }
}

// 通用证件号码提示
export const idTypeRule: any =  [{ required: true, message: '请输入证件号码', trigger: ['blur'] }]

// 根据证件类型校验证件号码
export const dynamicIdTypeRule: any = {
  1: [{ validator: validatorSFZ, trigger: ['blur'] }], // 身份证
  2: [{ validator: validatorPassport, trigger: ['blur'] }], // 护照
  3: [{ validator: validatorGATpass, trigger: ['blur'] }], // 港澳台通行证
  // 4: [{validator: validatorArmyman, trigger: ['blur'] }], // 军人证件
}

